package com.template.method.pattern.template;

/**
 * @author cc
 * @classname NetworkCourse
 * @description 模板会有一个或者多个未实现方法，而且这几个未实现方法有固定的执行顺序
 * @date 2022/3/28 14:00
 */
public abstract class NetworkCourse {

    public final void createCourse() {
        //1.分发预习资料
        postPreResource();
        //2.创建备课PPT
        createPPT();
        //3.直播授课
        liveVideo();
        //4.提交课件和笔记
        postNote();
        //5.提交源代码
        postSource();
        //6.布置作业，有些课是没有作业，有些课是有作业的
        if (needHomework()) {
            checkHomework();
        }
    }

    abstract void checkHomework();

    //钩子方法：实现流程的微调
    protected boolean needHomework() {
        System.out.println("父类的方法");
        return false;
    }

    final void postSource() {
        System.out.println("提交源代码");
    }

    final void postNote() {
        System.out.println("提交课件和笔记");
    }

    final void liveVideo() {
        System.out.println("直播授课");
    }

    final void createPPT() {
        System.out.println("创建备课PPT");
    }

    final void postPreResource() {
        System.out.println("分发预习资料");
    }
}
